package com.shujia.wyh.day27.network.udpcoding;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class ReceiveDemo2 {
    public static void main(String[] args) throws Exception {
        //创建接收端对象
        DatagramSocket ds = new DatagramSocket(12345);
        System.out.println("====================接收端开始接收数据：=======================");

        while (true){
            //2、创建一个数据包（用来接收数据的容器）
            //DatagramPacket(byte[] buf, int length)
            //构造一个 DatagramPacket用于接收长度的数据包 length 。
            byte[] bytes = new byte[1024];
            int length = bytes.length;
            DatagramPacket dp = new DatagramPacket(bytes, length);

            //3、调用Socket对象中一个方法接收数据
            //void receive(DatagramPacket p)
            //从此套接字接收数据报包
            ds.receive(dp); //阻塞式方法

            //解析ip地址和主机名
            InetAddress address = dp.getAddress();
            String ip = address.getHostAddress();
            String hostName = address.getHostName();


            //4、解析数据包，打印在控制台上
            //byte[] getData()
            //返回数据缓冲区。
            byte[] data = dp.getData();
            int length1 = dp.getLength(); //获取实际的数据长度
            String s = new String(data, 0, length1);
            System.out.println(hostName + ",ip地址为：" + ip + "发送的内容为：" + s);
        }
    }
}
